import axios, { type AxiosInstance, type AxiosRequestConfig, type AxiosResponse, type InternalAxiosRequestConfig } from 'axios';
import { useUserStore } from '@/stores/user'
// 定义接口用于返回的数据格式
interface ApiResponse<T> {
  code: number;
  message: string;
  data?: T;
}

// 创建axios实例
const service: AxiosInstance = axios.create({
  baseURL: 'https://gxqfl.maoln.com', // 根据环境变量设置基础URL
  timeout: 5000, // 请求超时时间
});

// 请求拦截器
service.interceptors.request.use(
  (config: InternalAxiosRequestConfig) => {
    // 在发送请求之前做些什么，比如添加token
    const token = useUserStore().token;
    // 确保 headers 存在
    config.headers = config.headers || {};
    config.headers['token'] = `${token}`;
    console.log('-------------', config)
    return config;
  },
  (error) => {
    // 对请求错误做些什么
    return Promise.reject(error);
  }
);

// 响应拦截器
service.interceptors.response.use(
  (response: AxiosResponse<ApiResponse<any>>) => {
    const res = response.data;

    // 根据业务逻辑判断成功或失败
    if (res.code === 1) {
      return res.data; // 返回data数据
    } else {
      // 业务逻辑错误处理
      console.error(`业务错误: ${res.message}`);
      return Promise.reject(new Error(res.message));
    }
  },
  (error) => {
    // 处理HTTP错误状态码
    if (error.response && error.response.status === 401) {
      console.warn('用户未登录或token失效');
      useUserStore().logout()
      // 这里可以实现跳转到登录页面的逻辑
    } else {
      console.error(`请求出错: ${error.message}`);
    }
    return Promise.reject(error);
  }
);

// 封装GET请求方法
export function getRequest<T>(url: string, params?: any): Promise<T> {
  const config: AxiosRequestConfig = {
    method: 'get',
    url,
    params
  };
  return service(config);
}

// 封装POST请求方法
export function postRequest<T>(url: string, data?: any): Promise<T> {
  const config: AxiosRequestConfig = {
    method: 'post',
    url,
    data
  };
  return service(config);
}